
package com.siashan.unipay4j.wx.model.transfer.newmodel;

import com.alibaba.fastjson.annotation.JSONField;
import com.siashan.unipay4j.wx.model.transfer.WxTransferDetail;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

/**
 * 发起商家转账
 *
 * @author siashan
 * @date 2024-06-22
 */
@Getter
@Setter
@NoArgsConstructor
public class WxTransferNewModel {

    /**
     * appid
     * <p>
     * 必填
     *
     * @apiNote 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，例如公众号场景下，
     * 需使用应用属性为公众号的服务号APPID
     */
    private String appid;
    /**
     * 商家单号
     * <p>
     * 必填
     * <p>
     * 商户系统内部的商家单号，要求此参数只能由数字、大小写字母组成，在商户系统内部唯一
     */
    @JSONField(name = "out_bill_no")
    private String outBillNo;

    /**
     * 转账场景ID
     * <p>
     * 必填
     * <p>
     * 该笔转账使用的转账场景，可前往“商户平台-产品中心-商家转账”中申请。如：1001-现金营销
     */
    @JSONField(name = "transfer_scene_id")
    private String transferSceneId;
    /**
     * 收款用户OpenID
     * <p>
     * 必填
     * <p>
     * 用户在商户appid下的唯一标识。发起转账前需获取到用户的OpenID
     */
    private String openid;
    /**
     * 收款用户姓名
     *
     * 收款方真实姓名。需要加密传入，支持标准RSA算法和国密算法，公钥由微信侧提供。
     * 转账金额 >= 2,000元时，该笔明细必须填写
     * 若商户传入收款用户姓名，微信支付会校验收款用户与输入姓名是否一致，并提供电子回单
     */
    @JSONField(name = "user_name")
    private String userName;
    /**
     * 转账金额
     * <p>
     * 必填
     * <p>
     * 转账金额单位为“分”
     */
    @JSONField(name = "transfer_amount")
    private int transferAmount;
    /**
     * 转账备注
     *
     * 转账备注，用户收款时可见该备注信息，UTF8编码，最多允许32个字符
     */
    @JSONField(name = "transfer_remark")
    private String transferRemark;
    /**
     * 通知地址
     * <p>
     * 选填
     * <p>
     * 异步接收微信支付结果通知的回调地址，通知url必须为公网可访问的URL，必须为HTTPS，不能携带参数
     */
    @JSONField(name = "notify_url")
    private String notifyUrl;
    /**
     * 用户收款感知
     *
     * 用户收款时感知到的收款原因将根据转账场景自动展示默认内容。如有其他展示需求，可在本字段传入。各场景展示的默认内容和支持传入的内容
     * https://pay.weixin.qq.com/doc/v3/merchant/4012711988#2.3-%E5%8F%91%E8%B5%B7%E8%BD%AC%E8%B4%A6
     */
    @JSONField(name = "user_recv_perception")
    private String userRecvPerception;

    /**
     * 转账场景报备信息
     * <p>
     * 必填
     * <p>
     * 各转账场景下需报备的内容，商户需要按照所属转账场景规则传参，详见转账场景报备信息字段说明。
     * https://pay.weixin.qq.com/doc/v3/merchant/4013774588
     */
    @JSONField(name = "transfer_scene_report_infos")
    private List<WxTransferSceneReportItems> transferSceneReportInfos;


    /**
     * 参数校验
     */
    public void check(){

    }

}
